package com.ifonly.common.typeconverter.impl;

import com.ifonly.common.typeconverter.Converter;
import com.ifonly.common.typeconverter.TypeConversionException;

import java.util.ArrayList;
import java.util.List;

/**
 * @author <a href="mailto:ifonlymaster@163.com">ifonly</a>
 * @version 1.0 2015-12-17 19:38
 * @since JDK 1.6
 */
public class BooleanConverter implements Converter<Boolean> {

    private List<String> trueValues;
    private List<String> falseValues;

    public BooleanConverter() {
        trueValues = new ArrayList<String>();
        falseValues = new ArrayList<String>();
    }

    public BooleanConverter addBooleanTrueStringValue(String str) {
        trueValues.add(str);
        return this;
    }

    public BooleanConverter addBooleanFalseStringValue(String str) {
        falseValues.add(str);
        return this;
    }

    @Override
    public Boolean convert(Object value) {
        if (value == null) {
            return null;
        }
        if (value.getClass() == Boolean.class) {
            return (Boolean) value;
        }
        String stringValue = value.toString().trim().toLowerCase();
        if (stringValue.equals("true") || trueValues.contains(stringValue)) {
            return Boolean.TRUE;
        }
        if (stringValue.equals("false") || falseValues.contains(stringValue)) {
            return Boolean.FALSE;
        }
        throw new TypeConversionException(value);
    }
}
